<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="../css/main.css" media="all" rel="stylesheet" type="text/css" />
<link href="../css/highlight.css" media="all" rel="stylesheet" type="text/css" />
<link href="../css/print.css" media="print" rel="stylesheet" type="text/css" />
<title>第3章 - symfonyを動かす</title>
</head>

<body>
<div class="navigation">

<table width="100%">
<tr>
<td width="40%" align="left"><a href="02-Exploring-Symfony-s-Code.html">前の章</a></td>
<td width="20%" align="center"><a href="index.html">ホーム</a></td>
<td width="40%" align="right"><a href="04-The-Basics-of-Page-Creation.html">次の章</a></td>
</tr>
</table>
<hr/>
</div>

<div>
<a name="chapter.3.running.symfony" id="chapter.3.running.symfony"></a><h1>第3章 - symfonyを動かす</h1>

<p>前回の章で、symfonyがPHPで書かれたファイルの集まりであることを学びました。symfonyはこれらのファイルを使うので、symfonyをインストールすることは、これらのファイルを手に入れてプロジェクトのために利用できるようになることを意味します。</p>

<p>PHP 5のフレームワークなので、symfonyはPHP 5を必要とします。コマンドラインを開きつぎのコマンドを入力することでPHP 5がインストールされているか確認をしてください:</p>

<pre><code>&gt; php -v

PHP 5.2.0 (cli) (built: Nov 2 2006 11:57:36)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
</code></pre>

<p>バージョン番号が5.0かそれ以上であるならば、この章で説明されているように、あなたはインストールする準備ができています。</p>

<div class="toc">
<dl>
<dt><a href="#installing.the.sandbox">3.1. サンドボックスをインストールする</a></dt>
<dt><a href="#installing.the.symfony.libraries">3.2. symfonyのライブラリをインストールする</a></dt>
<dd><dl>
<dt><a href="#installing.the.symfony.pear.package">3.2.1. symfonyのPEARパッケージをインストールする</a></dt>
<dt><a href="#checking.out.symfony.from.the.svn.repository">3.2.2. SVNリポジトリからsymfonyをチェックアウトする</a></dt>
</dl></dd>
<dt><a href="#setting.up.an.application">3.3. アプリケーションをセットアップする</a></dt>
<dd><dl>
<dt><a href="#creating.the.project">3.3.1. プロジェクトを作成する</a></dt>
<dt><a href="#creating.the.application">3.3.2. アプリケーションを作成する</a></dt>
</dl></dd>
<dt><a href="#configuring.the.web.server">3.4. Webサーバーを設定する</a></dt>
<dd><dl>
<dt><a href="#setting.up.a.virtual.host">3.4.1. バーチャルホストをセットアップする</a></dt>
<dt><a href="#configuring.a.sharedhost.server">3.4.2. 共用ホストのサーバーを設定する</a></dt>
</dl></dd>
<dt><a href="#troubleshooting">3.5. トラブルシューティング</a></dt>
<dd><dl>
<dt><a href="#typical.problems">3.5.1. 典型的な問題</a></dt>
<dt><a href="#symfony.resources">3.5.2. symfonyのリソース</a></dt>
</dl></dd>
<dt><a href="#source.versioning">3.6. ソースコードのバージョン管理</a></dt>
<dt><a href="#summary">3.7. まとめ</a></dt>
</dl>
</div>
<a name="installing.the.sandbox" id="installing.the.sandbox"></a><h2>サンドボックスをインストールする</h2>

<p>symfonyが何をできるのか知りたいのであれば、おそらく早くインストールしたいと思うでしょう。その場合、サンドボックスが必要です。</p>

<p>サンドボックスはシンプルなファイルのアーカイブです。必要なライブラリ(symfony、pake、lime、Creole、PropelそしてPhing)のすべてとデフォルトのアプリケーションと基本設定を含む空のsymfonyプロジェクトが含まれます。特別なサーバーの設定やパッケージを追加しなくても、そのまま動きます。</p>

<p>インストールするには、<a href="http://www.symfony-project.org/get/sf_sandbox.tgz">http://www.symfony-project.org/get/sf_sandbox.tgz</a> からsandboxアーカイブをダウンロードします。サーバー用に設定したrootディレクトリ(通常は<code>web/</code>もしくは<code>www/</code>)の下に解凍します。統一性を保つために、この章では、ダウンロードしたアーカイブを<code>sf_sandbox/</code>ディレクトリに解凍したことを前提とします。</p>

<blockquote class="caution"><p>
  Webディレクトリのrootにすべてのファイルを設置することはローカルホストで独自のテストを行う分にはいいですが、運用サーバーではわるい習慣です。あなたのアプリケーションの内部がエンドユーザーに見られてしまいます。</p>
</blockquote>

<p>symfonyのコマンドラインインターフェイス(CLI - Command Line Interface)を実行してインストールしたsymfonyをテストしてください。*nixシステム上では新しい<code>sf_sandbox/</code>ディレクトリに移動し、つぎのコマンドを入力します:</p>

<pre><code>&gt; ./symfony -V
</code></pre>

<p>Windows上では、つぎのコマンドを実行します:</p>

<pre><code>&gt; symfony -V
</code></pre>

<p>サンドボックスのバージョン番号が表示されます:</p>

<pre><code>symfony version 1.0.0
</code></pre>

<p>つぎのURLをリクエストしてブラウザーでサンドボックスを閲覧できるか確認してください:</p>

<pre><code>http://localhost/sf_sandbox/web/frontend_dev.php/
</code></pre>

<p>図3-1のような初期ページが表示され、これはインストール作業が終了したことを意味します。そうではない場合、必要な設定変更を行うよう指示するエラーメッセージが表示されます。この章の後のほうの"トラブルシューティング"のセクションを参照することもできます。</p>

<p>図3-1 - サンドボックスの初期ページ</p>

<p><img src="images/F0301.jpg" alt="サンドボックスの初期ページ" title="サンドボックスの初期ページ" /></p>

<p>サンドボックスの目的はローカルコンピュータ上でsymfonyを練習することであり、Webに公開する予定の複雑なアプリケーションを開発するためではありません。しかしながら、サンドボックスを搭載したsymfonyのバージョンは十分な機能を持ちPEARからインストールしたものと同等です。</p>

<p>サンドボックスをアンインストールするには、 <code>web/</code>フォルダーから<code>sf_sandbox/</code>ディレクトリを削除するだけです。</p>

<a name="installing.the.symfony.libraries" id="installing.the.symfony.libraries"></a><h2>symfonyのライブラリをインストールする</h2>

<p>アプリケーションを開発するとき、おそらくsymfonyを2回インストールする必要があります: 1回目は開発環境のため、(すでにホストにsymfonyがインストールされていないのであれば)2回目はホストサーバーのためです。それぞれのサーバーのために、1つのアプリケーションだけ、もしくはいくつかのアプリケーションを開発していようとも、1つの場所にsymfonyのファイルを保存することで重複を避けたいと思うでしょう。</p>

<p>symfonyフレームワークは早く進化するので、最初にインストールした数日後に新しいバージョンがリリースされる可能性があります。フレームワークのアップグレード作業は主要な問題と考える必要があります。これがすべてのsymfonyのプロジェクトをまたがってsymfonyのライブラリの1つのインスタンスを共有すべきである別の理由です。</p>

<p>実際のアプリケーション開発のためにライブラリをインストールする方法に関しては、代わりの方法が2つあります:</p>

<ul>
<li>PEARによるインストールは多くの人にお勧めです。共有とアップグレード作業を簡単に行うことが可能で、インストール方法は単刀直入です。</li>
<li>Subversion(SVN)によるインストール方法は最新のパッチを利用する、独自の機能を追加する、かつ/もしくはsymfonyのプロジェクトに貢献をする、などのPHPの上級者が利用することだけを意図しています。</li>
</ul>

<p>symfonyはいくつかのパッケージを統合しています:</p>

<ul>
<li>pakeはCLIのユーティリティです。</li>
<li>limeはユニットテストのユーティリティです。</li>
<li>Creoleはデータベース抽象化エンジンです。PHP Data Objects(PDO)のようなもので、あなたのコードとデータベースのSQLコード間のインターフェイスを提供し、ほかのエンジンに切り替えることを可能にします。 </li>
<li>PropelはORMです。オブジェクトの永続性とクエリサービスを提供します。</li>
<li>Phingはモデルクラスを生成するためにPropelで使われるビルドシステムです。</li>
</ul>

<p>Pakeとlimeはsymfonyのチームによって開発されました。Creole、Propel、Phingは別のチームからもたらされ、LGPL(GNU Lesser Public General License)の下でリリースされています。これらのパッケージはsymfonyに搭載されています。</p>

<a name="installing.the.symfony.pear.package" id="installing.the.symfony.pear.package"></a><h3>symfonyのPEARパッケージをインストールする</h3>

<p>symfonyのPEARパッケージはsymfonyのライブラリとすべての依存関係を含みます。<code>symfony</code>コマンドを含むCLIを拡張するスクリプトも含まれます。</p>

<p>インストールするための最初のステップはつぎのコマンドを入力してsymfonyのチャンネルをPEARに追加することです:</p>

<pre><code>&gt; pear channel-discover pear.symfony-project.com
</code></pre>

<p>チャンネルで利用可能なライブラリを見るにはつぎのコマンドを入力します:</p>

<pre><code>&gt; pear remote-list -c symfony
</code></pre>

<p>これでsymfonyの最新の安定バージョンをインストールする準備ができました。つぎのコマンドを入力してください:</p>

<pre><code>&gt; pear install symfony/symfony

downloading symfony-1.0.0.tgz ...
Starting to download symfony-1.0.0.tgz (1,283,270 bytes)
.................................................................
.................................................................
.............done: 1,283,270 bytes
install ok: channel://pear.symfony-project.com/symfony-1.0.0
</code></pre>

<p>これでお終いです。symfonyのファイルとCLIがインストールされました。バージョン番号を問い合わせる新しい<code>symfony</code>コマンドを呼び出してインストールが成功したか確認してください:</p>

<pre><code>&gt; symfony -V

symfony version 1.0.0
</code></pre>

<blockquote class="tip"><p>
  最新のバグ修正と機能強化を含む最新のベータ版をインストールすることを望むのであれば、代わりに<code>pear install symfony/symfony-beta</code>を入力してください。ベータリリースは完全には安定したものではなく、一般的に運用環境ではお勧めではありません。</p>
</blockquote>

<p>symfonyのライブラリはつぎのディレクトリにインストールされています:</p>

<ul>
<li><code>$php_dir/symfony/</code> は主要なライブラリを含みます。</li>
<li><code>$data_dir/symfony/</code> symfonyアプリケーションのスケルトン; デフォルトのモジュール; と設定、国際化データなどを含みます。</li>
<li><code>$doc_dir/symfony/</code> ドキュメントを含みます。</li>
<li><code>$test_dir/symfony/</code> ユニットテストを含みます。</li>
</ul>

<p>_dir変数はPEARの設定の一部です。これらの変数を見るために、つぎのコマンドを入力してください:</p>

<pre><code>&gt; pear config-show
</code></pre>

<a name="checking.out.symfony.from.the.svn.repository" id="checking.out.symfony.from.the.svn.repository"></a><h3>SVNリポジトリからsymfonyをチェックアウトする</h3>

<p>運用サーバー、もしくはPEARを選択しないとき、checkoutコマンドでリクエストすることでsymfonyのSubversionリポジトリから最新バージョンのsymfonyのライブラリを直接ダウンロードできます:</p>

<pre><code>&gt; mkdir /path/to/symfony
&gt; cd /path/to/symfony
&gt; svn checkout http://svn.symfony-project.com/tags/RELEASE_1_0_0/ .
</code></pre>

<blockquote class="tip"><p>
  1.0 branch(1.0.x)の最新の安定版のバグ修正リリースに関しては 
  (<a href="http://www.symfony-project.org/installation/1_0">http://www.symfony-project.org/installation/1_0</a>)を参照してください。</p>
</blockquote>

<p><code>symfony</code>コマンドは、PEARでインストールした場合のみ利用可能で、<code>/path/to/symfony/data/bin/symfony</code>スクリプトへの呼び出しです。ですので、SVNでインストールした場合、つぎのコマンドは<code>symfony -V</code>と同等です:</p>

<pre><code>&gt; php /path/to/symfony/data/bin/symfony -V

symfony version 1.0.0
</code></pre>

<p>SVNでインストールすることを選ぶ場合、おそらくあなたは既存のsymfonyのプロジェクトを持っています。symfonyのファイルを利用するこのプロジェクトのために、つぎのようにあなたのプロジェクトの<code>config/config.php</code>ファイルで定義されている2つの変数をつぎのように変更する必要があります:</p>

<pre class="php"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="re0">$sf_symfony_lib_dir</span>  <span class="sy0">=</span> <span class="st_h">'/path/to/symfony/lib'</span><span class="sy0">;</span>
<span class="re0">$sf_symfony_data_dir</span> <span class="sy0">=</span> <span class="st_h">'/path/to/symfony/data'</span><span class="sy0">;</span></pre>

<p>19章ではプロジェクトとsymfonyの設置ディレクトリ(シンボリックリンクと相対パスを含む)をリンクする別の方法を提示します。</p>

<blockquote class="tip"><p>
  代わりの方法として、PEARパッケージ(<a href="http://pear.symfony-project.com/get/symfony-1.0.0.tgz">http://pear.symfony-project.com/get/symfony-1.0.0.tgz</a>)をダウンロードして、どこかで解凍することもできます。チェックアウトと同じ結果になります。</p>
</blockquote>

<a name="setting.up.an.application" id="setting.up.an.application"></a><h2>アプリケーションをセットアップする</h2>

<p>2章で学んだように、symfonyはプロジェクトに関連するアプリケーションを集結させます。1つのプロジェクトのすべてのアプリケーションは同じデータベースを共有します。アプリケーションをセットアップするには、まずプロジェクトをセットアップしなければなりません。</p>

<a name="creating.the.project" id="creating.the.project"></a><h3>プロジェクトを作成する</h3>

<p>簡単なsymfonyのプロジェクトはあらかじめ定義されたディレクトリ構造に従います。symfonyコマンドラインは適切なツリー構造とアクセス権限を含む、プロジェクトのスケルトンを初期化することで、新しいプロジェクトの作成を自動化します。プロジェクトを作成するには、新しいディレクトリを作り、そのディレクトリをプロジェクトにするようにsymfonyに命令します。</p>

<p>PEARでインストールした場合、以下のコマンドを入力します:</p>

<pre><code>&gt; mkdir ~/myproject
&gt; cd ~/myproject
&gt; symfony init-project myproject
</code></pre>

<p>SVNでインストールした場合、つぎのコマンドでプロジェクトを作ります:</p>

<pre><code>&gt; mkdir ~/myproject
&gt; cd ~/myproject
&gt; php /path/to/symfony/data/bin/symfony init-project myproject
</code></pre>

<p><code>symfony</code>コマンドはプロジェクトのrootディレクトリ(前の例では<code>myproject/</code>)からつねに呼び出されなければなりません。なぜならこのコマンドによって実行されたタスクはプロジェクト固有のものだからです。</p>

<p>symfonyはつぎのようなディレクトリ構造を作ります:</p>

<pre><code>apps/
batch/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/
</code></pre>

<blockquote class="tip"><p>
  この<code>init-project</code>タスクはプロジェクトのrootディレクトリに<code>symfony</code>のスクリプトを追加します。このPHPスクリプトはPEARでインストールした<code>symfony</code>コマンドと同じことを行うので、もしネイティブなコマンドラインのサポートがない場合(SVNでインストールした場合)<code>symfony</code>の代わりに<code>php symfony</code>を呼び出すことができます。</p>
</blockquote>

<a name="creating.the.application" id="creating.the.application"></a><h3>アプリケーションを作成する</h3>

<p>プロジェクトを閲覧する準備がまだできていません。なぜなら少なくとも1つのアプリケーションが必要だからです。アプリケーションを初期化するには、<code>symfony init-app</code>コマンドを使いアプリケーションの名前を引数として渡します:</p>

<pre><code>&gt; symfony init-app myapp
</code></pre>

<p>このコマンドによってプロジェクトのrootで<code>apps/</code>フォルダーに<code>myapp/</code>ディレクトリが作られます。これらはアプリケーションのデフォルト設定とディレクトリの一式を持ちWebサイトのファイルをホストする準備ができています:</p>

<pre><code>apps/
  myapp/
    config/
    i18n/
    lib/
    modules/
    templates/
</code></pre>

<p>それぞれのデフォルト環境に対応するPHPファイルのなかにはプロジェクトの<code>web</code>ディレクトリの内部に作られるものもあります:</p>

<pre><code>web/
  index.php
  myapp_dev.php
</code></pre>

<p><code>index.php</code>は新しいアプリケーションの運用環境用のフロントコントローラーです。プロジェクトのアプリケーションを作成したので、symfonyが<code>myapp.php</code>の代わりに<code>index.php</code>という名前のファイルを作成しました。(もし<code>maynewapp</code>という名前の新しいアプリケーションを作成した場合、新しい運用環境用のフロントコントローラーは<code>mynewapp.php</code>という名前になります)。開発環境でアプリケーションを動かすには、フロントコントローラーである<code>myapp_dev.php</code>を呼び出します。5章でこれらの環境の詳細を学びます。</p>

<a name="configuring.the.web.server" id="configuring.the.web.server"></a><h2>Webサーバーを設定する</h2>

<p><code>web/</code>ディレクトリのスクリプトはアプリケーションへのエントリーポイント(入り口)です。インターネットからアクセスできるようにするため、Webサーバーを設定しなければなりません。プロフェッショナルなホスティング会社と同じように、あなたは開発サーバーのApacheを設定する権限が持ち、バーチャルホストをセットアップできるでしょう。共用サーバーにおいてはおそらく<code>.htaccess</code>ファイルへのアクセス権があるだけです。</p>

<a name="setting.up.a.virtual.host" id="setting.up.a.virtual.host"></a><h3>バーチャルホストをセットアップする</h3>

<p>リスト3-1はApacheの設定例で、新しいバーチャルホストが<code>httpd.conf</code>ファイルに追加されます(訳注：Apache2.2以降では<code>httpd-vhosts.conf</code>などのバーチャルホスト専用のファイルが用意されています)。</p>

<p>リスト3-1 - Apacheの設定サンプル(<code>apache/conf/httpd.conf</code>)</p>

<pre><code>&lt;VirtualHost *:80&gt;
  ServerName myapp.example.com
  DocumentRoot "/home/steve/myproject/web"
  DirectoryIndex index.php
  Alias /sf /$sf_symfony_data_dir/web/sf
  &lt;Directory "/$sf_symfony_data_dir/web/sf"&gt;
    AllowOverride All
    Allow from All
  &lt;/Directory&gt;
  &lt;Directory "/home/steve/myproject/web"&gt;
    AllowOverride All
    Allow from All
  &lt;/Directory&gt;
&lt;/VirtualHost&gt;
</code></pre>

<p>リスト3-1の設定では、<code>$sf_symfony_data_dir</code>プレースホルダーは実際のパスに置き換えなければなりません。たとえば、Unix系でPEAR版のパッケージをインストールした場合、つぎのようなディレクティブを入力します:</p>

<pre><code>    Alias /sf /usr/local/lib/php/data/symfony/web/sf
</code></pre>

<blockquote class="note"><p>
  <code>web/sf/</code>ディレクトリのエイリアスは必須ではありません。この設定によってApacheはWebデバッグツールバー、adminジェネレーター、デフォルトのsymfonyのページ、Ajaxサポートのための画像、スタイルシート、JavaScriptを見つけることができるようになります。このエイリアスの代わりの方法はシンボリックリンクを作るか<code>/path/to/symfony/data/web/sf/</code>ディレクトリを<code>myporject/web/sf/</code>ディレクトリにコピーすることです。</p>
</blockquote>

<p>-</p>

<blockquote class="tip"><p>
  PEARを通してsymfonyをインストールして
  symfonyの共有データが見つからない場合、PEARのconfigコマンドで表示される<code>data_dir</code>を見てください:</p>
  
  <p>pear config-show</p>
</blockquote>

<p>Apacheを再起動すれば作業は終わりです。つぎのURLに標準的なブラウザーを通して新しく作られたアプリケーションを呼び出して見ることができます:</p>

<pre><code>http://localhost/myapp_dev.php/
</code></pre>

<p>最初の方で示した図3-1に似た初期ページが見えます。</p>

<blockquote class="sidebar"><p class="title">
  URLの書き換え</p>
  
  <p>symfonyは"スマートURL"を表示するためにURLの書き換え機能(rewriting)を利用します。これによって検索エンジンには意味のあるロケーションを表示し、技術的なデータのすべてをユーザーから隠します。このルーティング(routing)と呼ばれる機能は9章で詳しく学びます。</p>
  
  <p>Apacheのバージョンが<code>mod_rewrite</code>モジュールでコンパイルされていない場合、DSO(Dynamic Shared Object - 動的共有オブジェクト)である<code>mod_rewrite</code>がインストールされておりつぎの行が<code>http.conf</code>に存在することを確認してください</p>
  
  <p>AddModule mod_rewrite.c
     LoadModule rewrite_module modules/mod_rewrite.so</p>
  
  <p>Internet Information Services(IIS)の場合、<code>isapi/rewrite</code>がインストールされて稼働していることが必要です。詳細なIISのインストールガイドに関してはsymfonyのオンラインドキュメントを確認してください。</p>
</blockquote>

<a name="configuring.a.sharedhost.server" id="configuring.a.sharedhost.server"></a><h3>共用ホストのサーバーを設定する</h3>

<p>共用サーバーでアプリケーションをセットアップするには少々巧妙な方法が必要です。通常ホストは利用者が変更できない固有のディレクトリのレイアウトを持つからです。</p>

<blockquote class="caution"><p>
  テストと開発を共用サーバーで直接行うことはよい習慣ではありません。1つの理由はテストと開発が終了していなくても、アプリケーションを見ることができるので、内部情報が流出し、大きなセキュリティの欠陥を公開するからです。ほかの理由はデバッグツールでアプリケーションを効率的に閲覧するには共用ホストのパフォーマンスが不十分だからです。ですので最初から共用ホストにインストールして開発を始めるべきではなく、ローカルでアプリケーションを開発して開発が終了してから共用ホストにデプロイすべきです。16章でデプロイの技術とツールについて詳しく説明をします。</p>
</blockquote>

<p>Webフォルダーは<code>web/</code>の代わりに<code>www/</code>と名づけ、<code>httpd.conf</code>にアクセスすることは不可能でWebフォルダーの<code>.htaccess</code>ファイルのみにアクセス可能である共用ホストを想像してください。</p>

<p>symfonyのプロジェクトにおいて、ディレクトリへのすべてのパスを設定することは可能です。19章で詳しく説明しますが、しばらくの間は、<code>web</code>ディレクトリを<code>www</code>にリネームして、リスト3-2で示されるように設定を変更することでアプリケーションはこの設定を考慮するようになります。これらの行をアプリケーションの<code>config.php</code>ファイルの最後の行に追加します。</p>

<p>リスト3-2 - デフォルトのディレクトリ構造の設定を変更する(<code>apps/myapp/config/config.php</code>)</p>

<pre class="php"><span class="re0">$sf_root_dir</span> <span class="sy0">=</span> sfConfig<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st_h">'sf_root_dir'</span><span class="br0">&#41;</span><span class="sy0">;</span>
sfConfig<span class="sy0">::</span><span class="me2">add</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span>
  <span class="st_h">'sf_web_dir_name'</span> <span class="sy0">=&gt;</span> <span class="re0">$sf_web_dir_name</span> <span class="sy0">=</span> <span class="st_h">'www'</span><span class="sy0">,</span>
  <span class="st_h">'sf_web_dir'</span>      <span class="sy0">=&gt;</span> <span class="re0">$sf_root_dir</span><span class="sy0">.</span><span class="kw4">DIRECTORY_SEPARATOR</span><span class="sy0">.</span><span class="re0">$sf_web_dir_name</span><span class="sy0">,</span>
  <span class="st_h">'sf_upload_dir'</span>   <span class="sy0">=&gt;</span> <span class="re0">$sf_root_dir</span><span class="sy0">.</span><span class="kw4">DIRECTORY_SEPARATOR</span><span class="sy0">.</span><span class="re0">$sf_web_dir_name</span><span class="sy0">.</span><span class="kw4">DIRECTORY_SEPARATOR</span><span class="sy0">.</span>sfConfig<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st_h">'sf_upload_dir_name'</span><span class="br0">&#41;</span><span class="sy0">,</span>
<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>

<p>プロジェクトのWeb公開ディレクトリのrootにはデフォルトで<code>.htaccess</code>ファイルが入ります。このファイルの内容はリスト3-3で示されています。あなたの共用ホストの要件を満たすように修正してください。</p>

<p>リスト3-3 - <code>.htaccess</code>のデフォルト設定(<code>myproject/www/.htaccess</code>)</p>

<pre><code>Options +FollowSymLinks +ExecCGI

&lt;IfModule mod_rewrite.c&gt;
  RewriteEngine On

  # .somethingを持つファイルをすべてスキップする
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # .htmlバージョンがここにあるか(キャッシュ)確認する
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # いいえ、Webのフロントコントローラーにリダイレクトする
  RewriteRule ^(.*)$ index.php [QSA,L]
&lt;/IfModule&gt;

# Webのフロントコントローラーから大きなクラッシュ
ErrorDocument 500 "&lt;h2&gt;Application error&lt;/h2&gt;symfony applicationfailed to start properly"
</code></pre>

<p>あなたのアプリケーションをブラウザーで見る準備ができました。つぎのURLをリクエストして初期ページを確認してください:</p>

<pre><code>http://www.example.com/myapp_dev.php/
</code></pre>

<blockquote class="sidebar"><p class="title">
  そのほかのサーバーの設定</p>
  
  <p>symfonyはそのほかのサーバーの設定に対して互換性があります。たとえば、バーチャルホストの代わりにエイリアスを使用してsymfonyのアプリケーションにアクセスできます。IISサーバーでもsymfonyのアプリケーションを動かすことができます。設定の数と同じぐらいたくさんのテクニックがあり、それらすべてを説明することはこの本の目的ではありません。</p>
  
  <p>特定のサーバー設定のための手引きを見つけるには、段階的なチュートリアルを多く掲載するsymfony公式サイトの wiki(<a href="http://trac.symfony-project.org">http://trac.symfony-project.org</a>)を参照してください。</p>
</blockquote>

<a name="troubleshooting" id="troubleshooting"></a><h2>トラブルシューティング</h2>

<p>インストール作業の最中に問題に遭遇したら、シェルかブラウザーに投じられたエラーもしくは例外を最大限活用してください。得られる情報はしばし一目瞭然で、あなたの問題に関するWeb上の詳細なリソースへのリンクを含むこともあります。</p>

<a name="typical.problems" id="typical.problems"></a><h3>典型的な問題</h3>

<p>symfonyを動かすことに関してまだ問題を抱えている場合、つぎの項目を確認してください:</p>

<ul>
<li><p>PHPインストレーションのなかにはPHP 4とPHP 5のコマンドが付属しているものがあります。この場合、コマンドラインはおそらく<code>php</code>の代わりに<code>php5</code>です。<code>symfony</code>コマンドの代わりに、<code>php5 symfony</code>を呼び出してみてください。<code>SetEnv PHP_VER 5</code>を<code>.htaccess</code>の設定に追加する、<code>web/</code>ディレクトリのスクリプトを<code>.php</code>から<code>.php5</code>にリネームすることなども必要かもしれません。PHP 4のコマンドラインでsymfonyにアクセスしようとするとつぎのようなエラーが投じられます:</p>

<pre><code>Parse error, unexpected ',', expecting '(' in .../symfony.php on line 19.
</code></pre></li>
<li><p><code>php.ini</code>で定義されるメモリの制限は少なくとも<code>16M</code>にしなければなりません。この問題に関する通常の症状はsymfonyをPEARもしくはコマンドライン経由でインストールしているときにエラーメッセージが表示されることです。</p>

<pre><code>Allowed memory size of 8388608 bytes exhausted
</code></pre></li>
<li><p><code>php.ini</code>の<code>zend.ze1_compatibility_mode</code>ディレクティブは<code>off</code>にしなければなりません。そうではない場合、Webスクリプトの1つをブラウザーで見ようとすると、"implict cloning"のエラーが生み出されます:</p>

<pre><code>Strict Standards: Implicit cloning object of class 'sfTimer'because of 'zend.ze1_compatibility_mode'
</code></pre></li>
<li><p>プロジェクトの<code>log/</code>と<code>cache/</code>ディレクトリはWebサーバーが書き込みできるようにしなければなりません。これらのディレクトリのパーミッションを持たないsymfonyのアプリケーションをブラウザーで見ようとすると例外で終わります:</p>

<pre><code>sfCacheException [message] Unable to write cache file"/usr/myproject/cache/frontend/prod/config/config_config_handlers.yml.php"
</code></pre></li>
<li><p>システムのincludeパスは<code>php</code>コマンドへのパスを含まなければならず、(PEARを利用した場合)<code>php.ini</code>のincludeパスはPEARへのパスが入っていなければなりません。</p></li>
<li>(たとえばWAMPパッケージを利用する場合など)ときに、サーバーのファイルシステム上に複数の<code>php.ini</code>が存在します。アプリケーションによって利用される<code>php.ini</code>の正確な位置を知るために、<code>phpinfo()</code>を呼び出します。</li>
</ul>

<blockquote class="note"><p>
  強制ではありませんが、パフォーマンス上の理由から<code>php.ini</code>の<code>magic_quotes_gpc</code>と<code>register_globals</code>ディレクティブを<code>off</code>にしておくことを強くお勧めします。</p>
</blockquote>

<a name="symfony.resources" id="symfony.resources"></a><h3>symfonyのリソース</h3>

<p>あなたの問題がほかの人がすでに遭遇した問題なのか、またさまざまな場所で解決方法を見つけることができないかつぎのような場所で調べることができます:</p>

<ul>
<li>symfonyのインストール方法に関するフォーラム (<a href="http://www.symfony-project.org/forum/">http://www.symfony-project.org/forum/</a>) はプラットフォーム、環境、設定、ホストなどのすべてインストールの質問を扱っています。</li>
<li>ユーザーのメーリングリストのアーカイブ (<a href="http://groups.google.fr/group/symfony-users">http://groups.google.fr/group/symfony-users</a>) も検索できます。あなた自身のものと似たような体験談が見つかるかもしれません。</li>
<li>公式サイトのwiki (<a href="http://trac.symfony-project.org/#Installingsymfony">http://trac.symfony-project.org/#Installingsymfony</a>) はインストール方法についてsymfonyのユーザーから寄稿された段階的なチュートリアルを含みます。</li>
</ul>

<p>回答が見つからない場合、symfonyのコミュニティに質問を投稿してください。もっとも活動的なコミュニティのメンバーからのフィードバックを得るにはフォーラム、メーリングリスト、<code>#symfony</code> IRCチャンネルに質問を投稿することもできます。</p>

<a name="source.versioning" id="source.versioning"></a><h2>ソースコードのバージョン管理</h2>

<p>アプリケーションをセットアップした時点で、バージョン管理(version control)を始めることをお勧めします。バージョン管理によってコードのすべての修正を追跡し、以前のリリースへアクセスすることが可能で、円滑なパッチ作業を行い、そしてチームの作業を効率的にできるようになります。symfonyはネイティブでCVSをサポートしますが、Subversion(<a href="http://subversion.tigris.org/">http://subversion.tigris.org/</a>)がお勧めです。つぎの例はSubversionのコマンドを示しており、すでにSubversionサーバーをインストールしてプロジェクトのために新しいリポジトリを作りたいということを前提としています。Windowsユーザーの場合、お勧めのSubversionクライアントはTortoiseSVN(<a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>)です。バージョン管理とここで使われたコマンドに関して詳しい情報はSubversionのドキュメント(訳注：<a href="http://svnbook.red-bean.com/index.html">「Subversionによるバージョン管理」</a>を参照))</p>

<p>つぎの例は<code>$SVNREP_DIR</code>が環境変数として定義されていることを前提とします。定義されていない場合、<code>$SVNREP_DIR</code>の位置にリポジトリの実際の位置を置き換える必要があります。</p>

<p><code>myproject</code>プロジェクトのために新しいリポジトリを作ります:</p>

<pre><code>&gt; svnadmin create $SVNREP_DIR/myproject
</code></pre>

<p>リポジトリの基本構造(レイアウト)は<code>trunk</code>、<code>tags</code>と<code>branches</code>ディレクトリでつぎの少々長いコマンドで作ります:</p>

<pre><code>&gt; svn mkdir -m "layout creation" file:///$SVNREP_DIR/myproject/trunk file:///$SVNREP_DIR/myproject/tags file:///$SVNREP_DIR/myproject/branches
</code></pre>

<p>これは最初のリビジョンになります。つぎにcacheとlogの一時ファイル以外のプロジェクトのファイルをインポートする必要があります:</p>

<pre><code>&gt; cd ~/myproject
&gt; rm -rf cache/*
&gt; rm -rf log/*
&gt; svn import -m "initial import" . file:///$SVNREP_DIR/myproject/trunk
</code></pre>

<p>つぎのコマンドを入力してコミットされたファイルをチェックしてください:</p>

<pre><code>&gt; svn ls file:///$SVNREP_DIR/myproject/trunk/
</code></pre>

<p>よさそうです。SVNリポジトリはすべてのプロジェクトファイルの参照バージョン(と履歴)を持ちます。このことは実際の<code>~/myproject/</code>ディレクトリのファイルはリポジトリを参照する必要があるということを意味します。そのためには、最初に<code>myproject/</code>ディレクトリをリネームし、すべてがうまくいったらすぐに削除しますが、新しいディレクトリでリポジトリのチェックアウトします:</p>

<pre><code>&gt; cd ~
&gt; mv myproject myproject.origin
&gt; svn co file:///$SVNREP_DIR/myproject/trunk myproject
&gt; ls myproject
</code></pre>

<p>これでお終いです。<code>~/myproject/</code>に設置されたファイルにとり組み、あなたの修正をリポジトリにコミットできます。クリーンナップすることと、不要になった<code>myproject.origin/</code>ディレクトリを削除することを忘れないでください。</p>

<p>まだセットアップする必要があることが残っています。あなたのワーキング(カレント)ディレクトリをリポジトリにコミットした場合、プロジェクトの<code>cache</code>や<code>log</code>ディレクトリに設置された、望まないいくつかのファイルをコピーするかもしれません。このプロジェクトのためにSVNが無視するリストを指定する必要があります。<code>cache/</code>と<code>log/</code>ディレクトリにフルアクセスする設定を再度行う必要があります:</p>

<pre><code>&gt; cd ~/myproject
&gt; chmod 777 cache
&gt; chmod 777 log
&gt; svn propedit svn:ignore log
&gt; svn propedit svn:ignore cache
</code></pre>

<p>SVNのために設定されたデフォルトのテキストエディタが起動します。もし起動しない場合、つぎのコマンドを入力してSubversionが好みのエディタを使うように設定してください:</p>

<pre><code>&gt; export SVN_EDITOR=&lt;name of editor&gt;
&gt; svn propedit svn:ignore log
&gt; svn propedit svn:ignore cache
</code></pre>

<p>コミットを行うときにSVNが無視する<code>myproject/</code>のサブディレクトリからすべてのファイルを追加してください:</p>

<pre><code>*
</code></pre>

<p>保存して終了させてください。作業は終わりました。</p>

<a name="summary" id="summary"></a><h2>まとめ</h2>

<p>ローカルサーバーでsymfonyを試して遊ぶには、インストール方法のうちベストな選択肢は、間違いなくサンドボックスです。サンドボックスにはあらかじめ設定されたsymfonyの環境が含まれるからです。</p>

<p>実際の開発のために、もしくは運用サーバーにおいて、PEARによるインストールもしくはSVNのチェックアウトする方法を選択してください。これらの作業によってsymfonyのライブラリをインストールし、プロジェクトとアプリケーションを初期化することも必要です。 アプリケーションのセットアップの最後の段階はサーバーの設定で、多くの方法で行われます。symfonyはバーチャルホストで完璧に動作し、これが推奨の解決方法です。</p>

<p>インストールをしている間に何か問題がありましたら、symfonyのWebサイト上で多くのチュートリアルとよく聞かれる質問への回答を調べます。必要であれば、あなたの問題をsymfonyのコミュニティに投稿すれば、素早くて効果的な回答を得るでしょう。</p>

<p>いったんプロジェクトが初期化されたら、バージョン管理のプロセスを始めることはよい習慣です。</p>

<p>これでsymfonyを使う準備ができたので、基本的なWebアプリケーションを開発する方法を見る段階にあります。</p>
</div>
<div class="navigation">
<hr/>
<table width="100%">
<tr>
<td width="40%" align="left"><a href="02-Exploring-Symfony-s-Code.html">前の章</a></td>
<td width="20%" align="center"><a href="index.html">ホーム</a></td>
<td width="40%" align="right"><a href="04-The-Basics-of-Page-Creation.html">次の章</a></td>
</tr>
</table>

</div>
</body>

</html>
